我一直认为,应该对数据库进行非规范化以提高读取性能,就像对OLAP数据库设计那样,而不是对OLTP设计进一步夸大3NF。
PerformanceDBA在各个职位中都有体现,例如,在“基于时间的数据的不同处理方式的性能”中,捍卫了一种范式,即数据库应始终通过归一化为5NF和6NF(范式)进行精心设计。
我是否正确理解(以及我正确理解的内容)?
OLAP数据库的传统非规范化方法/范式设计(3NF以下)又有何建议?3NF对于大多数OLTP数据库的实际情况而言已足够?
例如:
“简单的事实……是正确执行的6NF是数据仓库”(PerformanceDBA) 我应该承认,我永远无法掌握非规范化有助于读取性能的理论。有人能给我推荐书,并且对此有很好的逻辑解释吗?
当试图说服我的利益相关者应该对OLAP /数据仓库数据库进行规范化时,我可以参考哪些资源?
为了提高知名度,我从评论中复制了以下内容:
“如果参与者添加(公开)他们已经看到或参与的6NF中有多少实际(不包括科学项目)数据仓库实现,那就太好了。这是一个快速通道。我=0。” –达米尔·苏达雷维奇(Damir Sudarevic)
维基百科的数据仓库文章告诉您:
“归一化方法(相对于Ralph Kimball的一维方法),也称为3NF模型(第三范式),其支持者称为“ Inmonites”,他信奉Bill Inmon的方法,其中指出应该将数据仓库使用ER模型/归一化模型进行建模。”
看起来标准化的数据仓库方法(由Bill Inmon提出)被认为不超过3NF(?)
我只想了解数据仓库/ OLAP是非规范化的同义词的神话(或普遍存在的公理信念)的起源是什么?
达米尔·苏达雷维奇(Damir Sudarevic)回答说,这是铺平道路的做法。让我回到问题:为什么认为非正规化有助于阅读?
我一直认为,应该对数据库进行非规范化以进行读取,就像在OLAP数据库设计中那样,而不是在OLTP设计中进一步夸大3NF。
这种说法有一个神话。在关系数据库的背景下,我重新实现了六个非常大的所谓的“非规范化”“数据库”。并执行了80项作业,只需对它们进行归一化,应用标准和工程原理即可纠正他人的问题。我从未见过任何神话的证据。只有人们重复咒语,好像是某种神奇的祈祷一样。
归一化与未归一化
(“非规范化”是我拒绝使用的欺诈性用语。)
这是一个科学行业(至少提供不破坏软件的功能;使人们登上月球的系统;运行银行系统的系统等)。它是由物理定律而不是魔术定律的。计算机和软件都是有限的,有形的,受物理定律约束的物理对象。根据中学和高等教育,我得到:
更大,更胖,组织性更小的对象不可能比一个更小,更薄,组织性更强的对象表现更好。
归一化产生更多的表,是的,但是每个表都小得多。即使表更多,但实际上(a)联接较少,并且(b)联接更快,因为集合较小。总体上需要较少的索引,因为每个较小的表需要较少的索引。规范化的表还可以产生更短的行大小。
对于任何给定的资源集,规范化表:
在同一页面大小中容纳更多行 因此,请在同一缓存空间中容纳更多的行,从而提高整体吞吐量) 因此,可以在同一磁盘空间中容纳更多的行,从而减少I / O的数量;当需要I / O时,每个I / O效率更高。 。 大量复制的对象的性能不可能比存储为真相的单个版本的对象更好。例如。当我删除表和列级别的5 x重复项时,所有事务的大小都减小了;锁定减少;更新异常消失了。这大大减少了争用,因此增加了并发使用。 因此,总体结果是更高得多的性能。
以我从同一数据库中同时提供OLTP和OLAP的经验来看,从来没有必要对我的Normalized结构进行“反规范化”,以提高只读(OLAP)查询的速度。这也是一个神话。
不,其他人要求的“去标准化”降低了速度,因此消除了这种情况。对我来说并不奇怪,但再次,请求者感到惊讶。 人们写了许多书,推销神话。需要承认的是,这些人不是技术人员。由于他们销售魔术,因此所销售的魔术没有科学依据,因此他们很容易在销售中避开物理定律。
(对于希望对上述物理科学提出异议的任何人,仅重复此口头禅不会有任何影响,请提供支持该口头禅的具体证据。)
为什么神话盛行?
好吧,首先,它在不寻求克服物理定律的方法的科学类型中并不普遍。
根据我的经验,我确定了该流行的三个主要原因:
对于那些无法规范其数据的人,这是不这样做的便利理由。他们可以参考魔术书,而在没有任何魔术证据的情况下,他们可以虔诚地说“看到著名作家证实我的所作所为”。未完成,最准确的说。
许多SQL编码人员只能编写简单的单级SQL。规范化的结构需要一点SQL功能。如果他们没有那个;如果他们不使用临时表就无法产生SELECT;如果他们不能编写子查询,则将它们从心理上粘在臀部上,可以处理这些文件(即“非规范化”结构)。
人们喜欢读书和讨论理论。没有经验。特别是魔术。它是补品,是实际经验的替代品。实际正确规范化数据库的任何人都从来没有说过“反规范化要快于规范化”。对于任何说过这一口头禅的人,我只是说“给我看证据”,而他们从来没有提出任何证据。现实情况是,人们出于这些原因重复了神话,而没有任何归一化的经验。我们是畜群,未知是我们最大的恐惧之一。
这就是为什么我总是在任何项目中都包含“高级” SQL和指导的原因。
我的答案
如果我回答了您问题的每个部分,或者如果我回答了其他一些答案中不正确的内容,那么这个答案将非常荒谬。例如。以上仅回答了一项。因此,我将在不解决特定组件的情况下全面回答您的问题,并采用其他方法。我将只处理与您的问题相关的科学知识,并且我对此有充分的经验并且非常有经验。
让我以可管理的方式向您介绍科学。 典型的第一代“数据库” 六个大规模全面实施任务的典型模型。
这些是小型公司中常见的封闭式“数据库”,而组织是大型银行 对于第一代能够运行应用程序的心态非常好,但是在性能,完整性和质量方面却完全失败 它们是分别为每个应用程序设计的 报告是不可能的,他们只能通过每个应用程序报告 由于“去规范化”是一个神话,准确的技术定义是,它们没有被规范化 为了“去规范化”,必须先进行规范化;然后在人们向我展示其“非规范化”数据模型的每个实例中稍微扭转一下过程,简单的事实是,他们根本没有进行规范化;因此“去规范化”是不可能的;它只是未归一化 由于它们没有太多的关系技术或数据库的结构和控制,但是它们被当作“数据库”使用,因此我将这些词放在引号中 根据非规范化结构的科学保证,它们在每个内部都遭受多个版本的真相(数据重复),因此存在高争用和低并发性 他们还有一个跨“数据库”进行数据重复的问题 该组织试图使所有重复项保持同步,因此他们实施了复制;当然,这意味着要增加一台服务器;待开发的ETL和同步脚本;并保持;等等 不用说,同步永远还不够,他们永远在改变它 由于存在所有争用和低吞吐量,为每个“数据库”证明一个单独的服务器是完全没有问题的。它并没有太大帮助。 因此,我们考虑了物理定律,并应用了一些科学知识。 5NF公司数据库 我们实施了标准概念,即数据属于公司(而不是部门),并且公司需要真实性的一种版本。该数据库是纯关系数据库,已归一化为5NF。纯开放式架构,因此任何应用程序或报告工具都可以访问它。存储的proc中的所有事务(与整个网络中不受控制的SQL字符串相反)。经过我们的“高级”培训,每个应用程序的开发人员都为新应用程序编码。
显然,科学起作用了。好吧,这不是我的私人科学或魔术,而是普通的工程学和物理定律。所有这些都运行在一个数据库服务器平台上。两对(生产和灾难恢复)服务器已停用,并移交给另一个部门。将总计720GB的5个“数据库”标准化为一个总计450GB的数据库。将大约700个表(许多重复和重复的列)标准化为500个未重复的表。它的执行速度要快得多,整体速度要快10倍,某些功能要快100倍以上。这并不令我感到惊讶,因为这是我的意图,而且科学已经预言了这一点,但是它却使人们惊讶。
更多规范化
好吧,在每个项目中都对Normalization取得了成功,并且对所涉及的科学充满了信心,因此更多而不是更少地进行Normalize是自然而然的过程。在过去,3NF足够好,后来还没有发现NF。在过去的20年中,我只提供了更新异常为零的数据库,因此从今天对NF的定义来看,我一直提供5NF。
同样,5NF很棒,但也有其局限性。例如。旋转大表(按照MS PIVOT扩展,不是很小的结果集)很慢。因此,我(和其他人)开发了一种提供规范化表的方法,以使(a)简便而(b)很快。事实证明,既然已经定义了6NF,这些表就是6NF。
由于我从同一个数据库提供OLAP和OLTP,因此我发现,按照科学原理,结构的标准化程度越高:
他们执行得越快
并且可以以更多方式使用它们(例如,枢轴)
所以,是的,我有一致且不变的经验,不仅与未归一化或“去归一化”相比,归一化要快得多,而且要快得多。更标准化的速度甚至比少标准化。
成功的标志是功能的增长(失败的标志是功能的增长而不是功能的增长)。这意味着他们立即要求我们提供更多的报告功能,这意味着我们还要进行标准化,并提供更多的专用表(几年后证明是6NF)。
在该主题上取得进展。我一直是数据库专家,而不是数据仓库专家,因此我最初的几个带有仓库的项目不是成熟的实现,而是相当大的性能调整任务。他们在我的专业范围内使用我的产品。 典型数据仓库 我们不必担心标准化的确切级别等问题,因为我们正在研究典型情况。我们可以假设OLTP数据库已被合理地规范化,但不能使用OLAP,并且该组织购买了一个完全独立的OLAP平台和硬件。投资于开发和维护大量的ETL代码;等实施之后,他们花了一半的时间来管理他们创建的副本。在这里,应该责怪书籍作者和销售商,因为它们造成组织购买大量硬件和单独平台软件许可的浪费。
如果您尚未观察到它,我将请您注意典型的第一代“数据库”与典型数据仓库之间的相似之处 同时,回到服务器场(上面的5NF数据库),我们一直在增加越来越多的OLAP功能。当然,应用程序的功能有所增长,但这仅差一点,业务并没有改变。他们会要求更多的6NF,而且很容易提供(从5NF到6NF只是一小步;从0NF扩展到任何东西,更不用说5NF了,是一大步;有组织的体系结构很容易扩展)。
OLTP和OLAP之间的主要区别(即单独的OLAP平台软件的基本依据)是OLTP是面向行的,它需要事务安全的行,并且速度很快。OLAP不在乎事务性问题,它需要专栏,而且速度很快。这就是所有高端BI或OLAP平台都面向列的原因,这就是OLAP模型(Star Schema,Dimension-Fact)都面向列的原因。
但是使用6NF表:
没有行,只有列;我们以相同的盲目速度投放行和列
这些表(即6NF结构的5NF视图)已经组织成维度事实。事实上,他们被组织成多个尺寸比任何OLAP模型将永远辨认,因为它们是所有尺寸。
通过聚合实时旋转整个表(与少量派生列的PIVOT相对)是(a)轻松,简单的代码,并且(b)速度非常快 典型数据仓库
根据定义,多年来我们一直提供的关系数据库至少有5NF供OLTP使用,而6NF有OLAP要求。
请注意,这是我们从一开始就使用的一门科学。从典型的非规范化“数据库”迁移到5NF公司数据库。我们只是在应用更多经过验证的科学,并获得更高级别的功能和性能。
注意5NF公司数据库和6NF公司数据库之间的相似性
消除了单独的OLAP硬件,平台软件,ETL,管理,维护的全部成本。
数据只有一个版本,没有更新异常或维护;相同的数据为OLTP提供为行,为OLAP提供为列
我们唯一没有做的就是从一个新项目开始,并从一开始就声明纯6NF。这就是我接下来要排队的内容。
什么是第六范式?
假设您对Normalization有所了解(在这里我不会对其进行定义),则与此线程相关的非学术定义如下。请注意,它适用于表级别,因此您可以在同一数据库中混合使用5NF和6NF表:
第五范式:在数据库中解析的所有功能依赖项 除了4NF / BCNF 每个非PK列及其PK均为1 :: 1 并没有其他PK 没有更新异常 。 第六范式:是不可归约的NF,无法进一步缩小或标准化数据的点(不会有7NF) 除了5NF 该行包含一个主键,最多包含一个非键列 消除了空问题 6NF是什么样的?
数据模型属于客户,我们的知识产权不可免费发布。但是我确实会访问该网站,并提供问题的具体答案。您确实需要一个真实的示例,因此我将为我们的一个内部实用程序发布数据模型。
这个用于收集任何时期内任何客户的服务器监视数据(企业级数据库服务器和OS)。我们使用它来远程分析性能问题,并验证我们所做的任何性能调整。该结构在过去的十年中没有发生变化(增加了现有结构,但没有任何变化),这是专门的5NF的典型特征,很多年后才被确定为6NF。允许完全旋转;在任何尺寸上要绘制的任何图表(提供了22个枢轴,但不限于此);切片和切块;连连看。发现它们是所有尺寸。
监视数据或度量或向量可以更改(服务器版本更改;我们想进一步了解),而不会影响模型(您可能还记得我在另一篇文章中说过,EAV是6NF的混蛋;那么这就是完整的6NF,未稀释的父亲,因此提供了EAV的所有功能,而没有牺牲任何标准,完整性或关系能力);您只需添加行。
▶监控统计数据模型◀。(对于内联太大;某些浏览器无法内联加载;请单击链接)
它使我能够在收到客户的原始监视统计信息文件之后生成这些▶Chart这样的图表,进行六次击键。注意混合搭配;操作系统和服务器在同一图表上;各种枢轴。(经许可使用。)
不熟悉关系数据库建模标准的读者可能会发现▶IDEF1X Notation◀会有所帮助。
6NF数据仓库
Anchor Modeling最近对此进行了验证,因为他们现在将6NF展示为数据仓库的“下一代” OLAP模型。(它们不从数据的单个版本(仅由我们提供)中提供OLTP和OLAP)。
数据仓库(仅限)经验
我仅使用数据仓库(而不是上面的6NF OLTP-OLAP数据库)的经验是与主要实施项目不同的几个主要任务。结果不足为奇:
与科学一致,规范化结构的执行速度要快得多;易于维护;并且需要更少的数据同步。Inmon,不是Kimball。
与魔术一致,在我规范化一堆桌子并通过应用物理定律提供了显着改善的性能之后,唯一使人惊讶的是魔术师的口头禅。
具有科学头脑的人不会这样做;他们不相信或依靠银弹和魔法;他们使用勤奋的科学来解决他们的问题。
有效的数据仓库证明
这就是为什么我在其他文章中指出,对于单独的数据仓库平台,硬件,ETL,维护等而言,唯一有效的理由是存在许多数据库或“数据库”,这些数据库或“数据库”全部合并到一个中央仓库中,以进行报告和OLAP。
金博尔
关于Kimball的话是必要的,因为他是数据仓库中“对性能进行归一化”的主要支持者。根据我上面的定义,他是显然从未在生活中归一化的人之一。他的出发点是未归一化的(伪装为“去归一化”),他只是在Dimension-Fact模型中实现了这一点。
当然,要获得任何表现,他必须进一步“反规范化”,并创建更多副本,并证明所有这些理由。
因此,确实如此,以精神分裂症的方式,通过制作更专业的副本来“去规范化”未规范化的结构,“可以改善读取性能”。当整体考虑在内时,这是不正确的。确实只有那个小小的庇护所,而不是外面的庇护所。
同样,以那种疯狂的方式,在所有“桌子”都是怪物的情况下,“联接很昂贵”,这是可以避免的。他们从未经历过连接较小的表和集合的经验,因此他们无法相信更多的较小的表会更快的科学事实。
他们有创建重复的“表”的速度更快的经验,因此他们无法相信消除重复的速度甚至更快。
他的尺寸已添加到非规范化数据中。好吧,数据没有被规范化,因此没有暴露尺寸。而在归一化模型中,尺寸已经作为数据的组成部分公开,不需要添加任何内容。
金博尔(Kimball)铺好的道路通向悬崖,那里有更多的旅鸟以更快的速度下落。只要它们一起走在路上,并一起死去,它们就会快乐地死去。旅鼠不会寻找其他路径。
所有只是故事,一种神话的一部分,一起生活并且互相支持。
您的任务
您是否应该选择接受它。我要你自己思考,停止娱乐任何与科学和物理定律矛盾的思想。不管它们多么普遍,神秘或神话。在信任任何东西之前先寻求证据。要科学,为自己验证新的信念。重复“对性能进行非规范化”的口头禅不会使您的数据库更快,只会让您对此感觉更好。就像坐在旁边的胖孩子告诉自己,他的奔跑速度比比赛中所有孩子都快。
在此基础上,即使是“ OLTP规范化”的概念,反之亦然,“ OLAP规范化”是一个矛盾。物理定律如何在一台计算机上工作,而在另一台计算机上工作却相反?头脑陷入僵局。根本不可能,每台计算机上的工作方式都是一样的。